import Vue from "vue";
import Router from "vue-router";
import {routers} from "./router";
import store from "../store";
import {indexPage, loginPage} from "../config/config";
import {Message} from 'view-design';
import {isBlank} from "../config/util";

Vue.use(Router);

// 处理路由数据 添加父级name
export const routersArr = ()=>{
    for(let v of routers) {
        if (v.children) {
            setFuName(v.children, v)
        }
        function setFuName(chid, v) {
            // 开始处理子级
            for (let k of chid) {
                k.meta.fuName = v.name
                k.meta.fuTitle = v.meta.title
            }
        }
    }
    return routers
}
export default new Router({
    routes: routersArr()
});

// 路由跳转前事件
export const beforeRouter = (to, from, next) => {
    let arr = store.getters.getRouterArr // 获取路由数据
    const isLogin = store.getters.getIsLogin // 获取登陆状态
    if (to.path === "/") {
        // 判断是否登陆 已登陆跳转到首页 否则 登录页
        if (isLogin) {
            // 跳转配置的首页
            next({
                name: indexPage
            })
        } else {
            // 跳转配置的登录页
            next({
                name: loginPage
            })
        }
    } else if (to.matched.length === 0) {
        // 如果未匹配到正确的路由
        Message.warning('您要去的地址不存在哦！')
        // 如果上级也未匹配到路由则跳转首页页面，如果上级能匹配到则转上级路由
        from.name ? next({name: from.name}) : next('/')
    } else {
        // 如果不是登陆页
        if (to.name !== 'login') {
            // 判断是否登陆
            if (isLogin) {
                // 如果登陆 判断是否有权限访问
                // 如果登陆 判断是否有权限访问
                let isPermission = false
                const userData = store.getters.getUserData // 获取用户数据
                if (!isBlank(to.meta.permission)) {
                    if(to.meta.permission.length > 0) {
                        for(let u of userData.roles) {
                            if(isPermission) {
                                break
                            }
                            for(let v of to.meta.permission) {
                                if(v === u) {
                                    isPermission = true
                                    break
                                } else {
                                    isPermission = false
                                }
                            }
                        }
                    } else {
                        isPermission = true
                    }
                } else {
                    isPermission = true
                }
                if (!isPermission) {
                    Message.warning('没有权限哦！')
                    // 转上级路由
                    next({name: from.name})
                    return
                } else {
                    // 把路由数据push到vuex
                    let flag = false
                    if (arr.length < 1) {
                        flag = true
                    } else {
                        for (let i = 0; i < arr.length; i++) {
                            if (arr[i].name === to.name) {
                                flag = false
                                break
                            } else {
                                flag = true
                            }
                        }
                    }
                    if (flag) {
                        let item = {
                            fullPath: to.fullPath,
                            meta: to.meta,
                            name: to.name,
                            path: to.path
                        }
                        // 增加数据
                        store.dispatch('pushRouter', item)
                    }
                    next()
                }

            } else {
                // 未登陆 跳转到登陆页
                Message.warning('您还未登录 请登录！')
                next({
                    name: loginPage
                })
            }
        } else {
            next() // 默认跳转
        }
    }
}